<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // terator 的作用有三个：
        // 一是为各种数据结构，提供一个统一的、简便的访问接口；
        // 二是使得数据结构的成员能够按某种次序排列；
        // 三是 ES6 创造了一种新的遍历命令for...of循环，Iterator 接口主要供for...of消费


        // 每一次调用next方法，都会返回数据结构的当前成员的信息。【当前成员】
        // 具体来说，就是返回一个包含value和done两个属性的对象。[遍历器对象，即指针对象]
        // 其中，value属性是当前成员的值，done属性是一个布尔值，表示遍历是否结束。


        function moni() {
            // 下面是一个模拟next方法返回值的例子。
            var it = makeIterator(['a', 'b']);
            it.next() // { value: "a", done: false }
            it.next() // { value: "b", done: false }
            it.next() // { value: undefined, done: true }

            function makeIterator(array) {
                var nextIndex = 0;
                return {
                    next: function() {
                        return nextIndex < array.length ? {
                            value: array[nextIndex++],
                            done: false
                        } : {
                            value: undefined,
                            done: true
                        };
                    }
                };
            }
        }
    </script>
</body>

</html>